package org.gap.jseed.annotation;

import static java.lang.annotation.ElementType.TYPE;

import java.beans.PropertyChangeListener;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.gap.jseed.Seed;


/**
 * The bean defines that an interface or abstract class shall be injected with {@code Bean} 
 * behavior.  This interface will inject code for setters and getters, {@link PropertyChangeListener}s
 * event notification when a new value is being set, serialization support, and fill in default code
 * for the common {@code equals()}, {@code hashCode()} and {@code toString()} behavior.
 * 
 * This interface is registered with the {@link BeanInvocationHandler} in the {@link Seed} framework.
 * 
 * @see BeanInvocationHandler
 * @author gpelcha
 *
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({TYPE})
public @interface Bean {

}
